# encoding: utf-8
module ParceladoService
	
	#
	#
	def self.atualizar_parcelado(parcelado, new_attrs)
		ActiveRecord::Base.transaction do
			begin
				parcelado.parcelamento.clear
				parcelado.attributes = new_attrs

				return parcelado.save
			rescue ActiveRecord::Rollback => e
				return false
			rescue ArgumentError => e
				return false
			end
		end
	end

	#
	#
	def self.simular_parcelas(parcelado)
		unless parcelado.is_a? Parcelado
			raise ArgumentError, "Tipo inválido para o argumento 'parcelado'"
		end
	
		prox_data = parcelado.data
		valor_parcela = (parcelado.valor.to_f / parcelado.parcelas).round(2)
		
		unless parcelado.new_record?
			parcelado = parcelado.dup
		end
		
		parcelas = []

		parcelado.parcelas.times do |i|
			parcelas << Parcela.new(:ordem => i + 1,
				:data => prox_data,
				:valor => valor_parcela)
			
			prox_data = prox_data.next_month
		end
		
		return parcelas
	end

	#
	#
	def self.parcelar(parcelado)
		unless parcelado.is_a? Parcelado
			raise ArgumentError, "Tipo inválido para o argumento 'parcelado'"
		end
	
		prox_data = parcelado.data
		valor_parcela = (parcelado.valor.to_f / parcelado.parcelas).round(2)
		
		unless parcelado.new_record?
			parcelado = parcelado.dup
		end
		
		parcelado.parcelas.times do |i|
			parcelado.parcelamento.build(:ordem => i + 1,
				:observacao => parcelado.observacao,
				:data => prox_data,
				:valor => valor_parcela,
				:quitada => false)
			
			prox_data = prox_data.next_month
		end
		
		return parcelado
	end
end


